package com.ruoyi.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.ContructionProjectAddOrUpdateDTO;
import com.ruoyi.system.dto.ContructionProjectDTO;
import com.ruoyi.system.dto.ContructionProjectQueryDTO;
import com.ruoyi.system.entity.ConstructionProjectDO;
import com.ruoyi.system.vo.ProjectDetailVO;

public interface ConstructionProjectService extends IService<ConstructionProjectDO> {

    /**
     * 新增施工项目（含阶段关联）
     * @param dto 新增DTO
     * @param operator 操作人
     * @return 生成的施工编号
     */
    String addProject(ContructionProjectAddOrUpdateDTO dto, String operator);

    /**
     * 修改施工项目（含阶段关联同步）
     * @param dto 修改DTO
     * @param operator 操作人
     */
    void updateProject(ContructionProjectAddOrUpdateDTO dto, String operator);

    /**
     * 分页查询施工项目列表
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<ContructionProjectDTO> queryProjectPage(ContructionProjectQueryDTO queryDTO);

    /**
     * 获取项目详情（含阶段、团队、事项信息）
     * @param projectId 项目ID
     * @return 项目详情VO
     */
    ProjectDetailVO getProjectDetail(Long projectId);

    /**
     * 更新项目状态（进行中/暂停）
     * @param projectId 项目ID
     * @param status 目标状态（1-进行中，2-暂停）
     * @param pauseReason 暂停原因（状态为暂停时必传）
     * @param operator 操作人
     */
    void updateProjectStatus(Long projectId, Integer status, String pauseReason, String operator);

    /**
     * 生成施工编号（规则：SG + 年份 + 6位流水号）
     * @return 施工编号
     */
    String generateProjectCode();

    /**
     * 根据h5用户id查询进行中的施工项目详情
     */
    ProjectDetailVO getProjectByH5UserId(Long h5UserId);

    /**
     * 在建工地数（施工项目维度）：已开工未结项
     * 口径：is_deleted = 0 且 project_status = 1(进行中)
     */
    long countUnderConstructionProjects();

}
